package com.grass.plugin.dialect;

import com.grass.plugin.paging.page.Page;

/**
 * @author wujx
 * QQ 396246973
 * Date 2013-02-10
 */
public abstract class Dialect {

    /**
     * 获取分页的SQL语句
     *
     * @param sql SQL语句
     * @param pageIndex 页码
     * @param pageSize 记录数
     * @return
     */
    public abstract String getLimitString(String sql, Page page);
    
    /**
     * 对sql语句进行定界符转义
     * @param sql 原始sql
     * @param lmark 左侧定界符
     * @param rmark 右侧定界符
     * @return
     */
   public final String Escape(String sql) {	   
		return Escape(sql, null, null);
	}
    
    /**
     * 对sql语句进行定界符转义
     * @param sql 原始sql
     * @param lmark 左侧定界符
     * @param rmark 右侧定界符
     * @return
     */
   public String Escape(String sql,String lmark, String rmark) {	   
		return sql.replaceAll(lmark == null? "\\[" : lmark, "\\[").replaceAll(rmark == null? "\\]" : rmark, "\\]");
	}
   /**
    * 是否支持数据库原生分页
    * @return
    */
   public boolean NativePaging(){
	   return true;
   }
   
    /**
     * 是否存在distinct 语句
     *
     * @param sql
     * @return
     */
    protected boolean hasDistinct(String sql) {
        return sql.toLowerCase().indexOf("select distinct") >= 0;
    }
}
